home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
graphics
/
circuit_macros
/
libcct.m4
< prev
next >
Wrap
Text File
|
1994-03-13
|
10KB
|
235 lines
divert(-1)
libcct.m4
and gpic circuit macros:
m4 <path>/libcct.m4 <diag>.m4 | dpic [-p] [-t] > <diag>.tex , or
m4 <path>/libcct.m4 <diag>.m4 | gpic [-t] > <diag>.tex
define(`HOMELIB_',`/u/aplevich/lib')
ifdef(`dir_',,`include(HOMELIB_/libgen.m4)')
divert(-1)
Circuit constructs
define(`par_',`[Start:Here
line from Start + vec_(0,$3/2) to Start + vec_(0,-($3/2))
move to Start + vec_(0,$3/2); $1
move to Start + vec_(0,-($3/2)); $2
line to rvec_(0,$3)
End: last line.c] with .Start at Here
move to last [].End')
define(`eleminit_',`ifelse(`$1',,`eleng=elen_',
`rpoint_(`$1') dnl
eleng=sqrt(elendx*elendx + elendy*elendy)' )' dnl
) dnl
define(`resistor',`eleminit_(`$1')
define(`v_',`dimen_/12')define(`h_',`dimen_/24')dnl
{ line to rvec_(eleng/2-6*h_,0) then to rvec_(eleng/2-5*h_, v_)\
then to rvec_(eleng/2-3*h_,-v_) then to rvec_(eleng/2-1*h_, v_)\
then to rvec_(eleng/2+1*h_,-v_) then to rvec_(eleng/2+3*h_, v_)\
then to rvec_(eleng/2+5*h_,-v_) then to rvec_(eleng/2+6*h_,0)\
then to rvec_(eleng,0) }
{ [ box invis ht_ dimen_/6 wid_ dimen_/2 ] with .c at rvec_(eleng/2,0) }
line to rvec_(eleng,0) invis ')
define(`iresistor',`eleminit_(`$1')
{arrow to rvec_(edel_+dimen_/5,0)}; resistor(`$1')')
Inductor coefficients
define(`d1_',dimen_/10)
define(`ct_',Cos(25))define(`st_',Sin(25))
define(`c2t_',Cos(50))define(`s2t_',Sin(50))
Wide inductor
define(`Inductor',`eleminit_(`$1')
{ line from rvec_(eleng,0) to rvec_(eleng-(eleng-(6*c2t_+2*ct_)*d1_)/2,0)
arc ccw to rvec_(vscal_(d1_,-ct_-c2t_,st_-s2t_)) rad d1_ \
with .c at rvec_(vscal_(d1_,-ct_,st_))
arc ccw to rvec_(vscal_(d1_,-2*c2t_,0)) rad d1_ \
with .c at rvec_(vscal_(d1_,-c2t_,s2t_))
arc ccw to rvec_(vscal_(d1_,-2*c2t_,0)) rad d1_ \
with .c at rvec_(vscal_(d1_,-c2t_,s2t_))
arc ccw to rvec_(vscal_(d1_,-ct_-c2t_,s2t_-st_)) rad d1_ \
with .c at rvec_(vscal_(d1_,-c2t_,s2t_))
line to rvec_(-(eleng-(6*c2t_+2*ct_)*d1_)/2,0) }
{[ box invis ht_ (1+s2t_)*d1_ wid_ (6*c2t_+2)*d1_ ] \
with .c at rvec_(eleng/2,(st_-s2t_/2+1/2)*d1_)}
line to rvec_(eleng,0) invis')
define(`iInductor',`eleminit_(`$1')
{arrow to rvec_(edel_+dimen_/5,0)}; Inductor(`$1')')
Narrow inductor
define(`inductor',`eleminit_(`$1')
{ line to rvec_(eleng/2-dimen_/4,0)
{arc cw rad dimen_/16 to rvec_(dimen_/8,0) at rvec_(dimen_/16,0)
arc cw rad dimen_/16 to rvec_(dimen_/8,0) at rvec_(dimen_/16,0)
arc cw rad dimen_/16 to rvec_(dimen_/8,0) at rvec_(dimen_/16,0)
arc cw rad dimen_/16 to rvec_(dimen_/8,0) at rvec_(dimen_/16,0)}
line from rvec_(dimen_/2,0) to rvec_(eleng/2+dimen_/4,0) }
{[ box invis ht_ dimen_/16 wid_ dimen_/2 ] \
with .c at rvec_(eleng/2,dimen_/32)}
line to rvec_(eleng,0) invis')
define(`iinductor',`eleminit_(`$1')
{arrow to rvec_(edel_+dimen_/5,0)}; inductor(`$1')')
define(`capacitor',`eleminit_(`$1')
{ line to rvec_(eleng/2-dimen_*1/24,0)
{{line from rvec_(0,-dimen_/6) to rvec_(0,dimen_/6)}
up__
arc cw rad dimen_*2/3 from rvec_(dimen_/12,-dimen_/6)\
to rvec_(dimen_/12, dimen_/6) }
line from rvec_(dimen_*(1/12+3.872983348/6-2/3),0)\
to rvec_(eleng/2+dimen_*1/24,0)}
{[ box invis ht_ dimen_/3 wid_ dimen_/12 ] with .c at rvec_(eleng/2,0)}
line to rvec_(eleng,0) invis')
define(`icapacitor',`eleminit_(`$1')
{arrow to rvec_(dimen_/5,0)}; capacitor(`$1')')
(Voltage) source
define(`source',`eleminit_(`$1')
{line to rvec_(eleng/2-dimen_/4,0)}
{[circle rad dimen_/4] with .c at rvec_(eleng/2,0)}
{line from rvec_(eleng/2+dimen_/4,0) to rvec_(eleng,0)}
line to rvec_(eleng,0) invis')
Current source
define(`csource',`eleminit_(`$1')
{arrow from rvec_(eleng/2-dimen_*3/16,0)\
to rvec_(eleng/2+dimen_*3/16,0)}
source(`$1') ')
Controlled source
define(`consource',`eleminit_(`$1')
{line to rvec_(eleng/2-dimen_/6,0)
line to rvec_(dimen_/3/sqrt(2),dimen_/3/sqrt(2))\
then to rvec_(2*dimen_/3/sqrt(2),0)\
then to rvec_(dimen_/3/sqrt(2),-dimen_/3/sqrt(2))\
then to Here
line from rvec_(2*dimen_/3/sqrt(2),0) to\
rvec_(2*dimen_/3/sqrt(2)+eleng/2-dimen_/6,0)}
{[ box invis ht_ dimen_/3/sqrt(2) wid_ dimen_/3/sqrt(2) ] \
with .c at rvec_(eleng/2,0)}
line to rvec_(eleng,0) invis')
D.C. voltage
define(`battery',`eleminit_(`$1')
{ line to rvec_(eleng/2-dimen_/24,0)
{line from rvec_(0,-dimen_/8) to rvec_(0,dimen_/8)}
move to rvec_(dimen_/12,0)
{line from rvec_(0,-dimen_/4) to rvec_(0,dimen_/4)}
line to rvec_(eleng/2-dimen_/24,0) }
{[ box invis ht_ dimen_/2 wid_ dimen_/12 ] with .c at rvec_(eleng/2,0)}
line to rvec_(eleng,0) invis ')
Box element
define(`ebox',`eleminit_(`$1')
{line to rvec_(eleng/2-dimen_/4,0)
line from rvec_(0,-dimen_/10) to rvec_(0,dimen_/10)\
then to rvec_(dimen_/2,dimen_/10)\
then to rvec_(dimen_/2,-dimen_/10)\
then to rvec_(0,-dimen_/10)}
{line from rvec_(eleng/2+dimen_*1/4,0) to rvec_(eleng,0)}
{[ box invis ht_ dimen_/5 wid_ dimen_/2 ] with .c at rvec_(eleng/2,0)}
line to rvec_(eleng,0) invis ')
Gap with dots, e.g. down _; gap(linewid/2); rlabel(+,v_1,-)
define(`gap',`eleminit_(`$1')
{ dot; move to rvec_(eleng,0); dot }
{[ box invis ht_ 0 wid_ eleng-dimen_/4 ] with .c at rvec_(eleng/2,0)}
line invis to rvec_(eleng,0) ')
Standard ground symbol, down from current postion, wd dimen_/3 ht dimen_*9/24
define(`grnd_',`{dnl
{line from rvec_(-dimen_/6,0) to rvec_(dimen_/6,0)}
{line from rvec_(-dimen_/9,-dimen_/24) to rvec_(dimen_/9,-dimen_/24)}
{line from rvec_(-dimen_/14,-dimen_/12) to rvec_(dimen_/14,-dimen_/12)}
}')
define(`ground',`{right_; line to rvec_(0,-dimen_/4); grnd_;}')
define(`grnd',`{right_; grnd_;}')
Switch
define(`switch',`eleminit_(`$1')
{line to rvec_(eleng/2-dimen_/6,0)\
then to rvec_(eleng/2+dimen_/12,dimen_/4)}
{line from rvec_(eleng/2+dimen_/6,0) to rvec_(eleng,0)}
line to rvec_(eleng,0) invis')
Closing switch
define(`cswitch',`switch(`$1'); dnl
{move to last line.start + vec_(eleng/2-dimen_/6,0)
arc <- up__ ccw from rvec_(vscal_(dimen_/4,Cos(20),-Sin(20)))\
to rvec_(vscal_(dimen_/4,Cos(60),Sin(60)))}
{[ box invis ht_ dimen_/4*(Sin(20)+Sin(60)) wid_ dimen_/4*(Cos(20)-Cos(60))]\
with .c at 0.5<last arc.start, last arc.end>} ')
Opening switch
define(`oswitch',`switch(`$1'); dnl
{move to last line.start + vec_(eleng/2-dimen_/6,0)
arc -> up__ ccw from rvec_(vscal_(dimen_/4,Cos(10),-Sin(10)))\
to rvec_(vscal_(dimen_/4,Cos(75),Sin(75)))}
{[ box invis ht_ dimen_/4*(Sin(10)+Sin(75)) wid_ dimen_/4*(Cos(10)-Cos(75))]\
with .c at 0.5<last arc.start, last arc.end>} ')
Amplifiers
define(`amp',`eleminit_(`$1')
{ line to rvec_(edel_,0)}; gamp ')
define(`integrator',`eleminit_(`$1')
line to rvec_(edel_,0);
{ line from rvec_(edel_,-dimen_/2) to rvec_( 0,-dimen_/2)\
then to rvec_( 0, dimen_/2)\
then to rvec_(edel_, dimen_/2)}; gamp(`$1') ')
Amplifier, dimen_ x dimen_ triangle centred on width elen_
triangle in a []
define(`gamp',`eleminit_(`$1')
{line from rvec_(eleng-edel_,0)\
to rvec_(edel_,-dimen_/2)\
then to rvec_(edel_, dimen_/2)\
then to rvec_(eleng-edel_,0) }
{ line from rvec_(eleng-edel_,0) to rvec_(eleng,0)}
{[ box invis ht_ dimen_ wid_ eleng-2*edel_ ] with .c at rvec_(eleng/2,0)}
line invis to rvec_(eleng,0) ')
define(`opamp',`eleminit_(`$1')
[In1: rvec_(edel_,dimen_/4)
{ifelse(`$1',,"\small{$-$}",`$1') at In1 ljust_ }
In2: rvec_(edel_,-dimen_/4)
{ifelse(`$2',,"\small{$+$}",`$2') at In2 ljust_ }
gamp(`$1'); Out: Here] with .c at rvec_(eleng/2,0)')
define(`delay',`eleminit_(`$1')
{line to rvec_((eleng-delayrad*5/3)/2,0)
line from rvec_(delayrad*2/3,-delayrad) to rvec_(0,-delayrad)\
then to rvec_(0,delayrad) then to rvec_(delayrad*2/3,delayrad)
{rt_; arc cw rad delayrad to rvec_(0,-2*delayrad) at rvec_(0,-delayrad)}
move to rvec_(delayrad,-delayrad)
line to rvec_((eleng-delayrad*5/3)/2,0)}
{[box invis ht_ delayrad*2 wid_ delayrad*5/3 ] with .c at rvec_(eleng/2,0)}
line invis to rvec_(eleng,0)')
labels at centre and both ends of an element dimen_ long
define(`glabel_',`dnl
ifelse(`$2',,,`{`"$$2$"' at last []$4 $5}')
ifelse(`$1',,,`{`"$$1$"' at last [].w_+vec_(-dimen_/8,0) $5}')
ifelse(`$3',,,`{`"$$3$"' at last [].e_+vec_( dimen_/8,0) $5}')
')
element labels to the left, right, centre of the current direction
define(`rlabel',`glabel_(`$1',`$2',`$3',.s_,below_)')
define(`llabel',`glabel_(`$1',`$2',`$3',.n_,above_)')
define(`clabel',`glabel_(`$1',`$2',`$3',,)')
Size of the central part of
two-terminal elements:
define(`dimen_',`linewid')
Element length:
define(`elen_',`dimen_*3/2')
define(`edel_',`(eleng-dimen_)/2')
Dots as small circles:
define(`dotrad',0.02)
Delay elements:
define(`delayrad',`0.35*dimen_')
divert